import { createRouter, createWebHistory } from 'vue-router'
import Index from '../views/wecom/index.vue'
import { isLoggedIn, getUrlCode } from '@/utils/auth'
import { useUserStore } from '@/stores/user'
import { qwLogin } from '@/api/qwAuth'
import qwsdk from '@/utils/qwsdk'

// 获取基础URL
const BASE_URL = import.meta.env ? import.meta.env.BASE_URL : '/'

const router = createRouter({
    history: createWebHistory(BASE_URL),
    routes: [
        {
            path: '/',
            redirect: '/wecom/index',
        },
        {
            path: '/wecom/index',
            name: 'index',
            component: Index,
        },
        {
            path: '/qw/about',
            name: 'about',
            // route level code-splitting
            // this generates a separate chunk (About.[hash].js) for this route
            // which is lazy-loaded when the route is visited.
            component: () => import('../views/wecom/about.vue'),
        },
    ],
})

// 全局导航守卫
router.beforeEach(async (to, from, next) => {
    // 检查是否已登录
    if (isLoggedIn()) {
        // 已登录，直接放行
        next()
        return
    }

    // 检查URL中是否有企业微信的授权code
    const code = getUrlCode()
    if (code) {
        // 有code，尝试使用code进行登录
        try {
            const res = await qwLogin({ code })
            if (res.code === 0 && res.data?.token) {
                // 登录成功，存储token和用户信息
                const userStore = useUserStore()
                userStore.setToken(res.data.token)

                // 保存用户信息
                const userInfo = {
                    id: res.data.id,
                    open_id: res.data.open_id,
                    external_userid: res.data.external_userid,
                }
                userStore.setUserInfo(userInfo)

                // 初始化企业微信SDK
                try {
                    console.log('用户登录成功，初始化企业微信SDK')
                    await qwsdk.initialize()
                    console.log('企业微信SDK初始化成功')
                } catch (error) {
                    console.error('企业微信SDK初始化失败', error)
                }

                // 成功登录后，跳转到目标页面
                next()
            } else {
                // 登录失败，重新进行企业微信授权
                console.error('登录失败，后端返回错误', res)

                // 清除URL中的code参数，防止循环登录
                const cleanUrl = window.location.href
                    .replace(/([&?])code=[^&]+(&|$)/, '$1')
                    .replace(/[?&]$/, '')
                window.history.replaceState({}, document.title, cleanUrl)

                // 如果需要重新登录，取消下面的注释
                // const userStore = useUserStore()
                // userStore.qwWebLogin()

                // 先放行到目标页面，让用户看到提示或手动登录
                next()
            }
        } catch (error) {
            console.error('企业微信授权登录失败', error)

            // 清除URL中的code参数，防止循环登录
            const cleanUrl = window.location.href
                .replace(/([&?])code=[^&]+(&|$)/, '$1')
                .replace(/[?&]$/, '')
            window.history.replaceState({}, document.title, cleanUrl)

            // 登录出错，可以选择重新进行企业微信授权或者放行到错误页面
            // const userStore = useUserStore()
            // userStore.qwWebLogin()

            // 先放行到目标页面，让用户看到提示或手动登录
            next()
        }
    } else {
        // 没有code，也没有登录状态，执行企业微信网页授权
        const userStore = useUserStore()
        userStore.qwWebLogin()
    }
})

export default router
